Home Home Loan Calculator

Home Loan Calculator

[cmsmasters_row][cmsmasters_column data_width=”1/1″][/cmsmasters_column][/cmsmasters_row][cmsmasters_row data_shortcode_id=”h38p1tjd4c” data_padding_bottom_mobile_v=”0″ data_padding_top_mobile_v=”0″ data_padding_bottom_mobile_h=”0″ data_padding_top_mobile_h=”0″ data_padding_bottom_tablet=”0″ data_padding_top_tablet=”0″ data_padding_bottom_laptop=”0″ data_padding_top_laptop=”0″ data_padding_bottom_large=”0″ data_padding_top_large=”0″ data_padding_bottom=”50″ data_padding_top=”0″ data_bg_parallax_ratio=”0.5″ data_bg_size=”cover” data_bg_attachment=”scroll” data_bg_repeat=”no-repeat” data_bg_position=”top center” data_color=”default” data_bot_style=”default” data_top_style=”default” data_padding_right=”3″ data_padding_left=”3″ data_width=”boxed”][cmsmasters_column data_width=”1/1″ data_shortcode_id=”c6tnl1p2t” data_animation_delay=”0″ data_border_style=”default” data_bg_size=”cover” data_bg_attachment=”scroll” data_bg_repeat=”no-repeat” data_bg_position=”top center”][cmsmasters_html shortcode_id=”0hspl941s”]PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9ImVuIj4KPGhlYWQ+CiAgICA8bWV0YSBjaGFyc2V0PSJVVEYtOCI+CiAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEuMCI+CiAgICA8dGl0bGU+SG9tZSBMb2FuIENhbGN1bGF0b3I8L3RpdGxlPgogICAgPCEtLSBUYWlsd2luZCBDU1MgQ0ROIC0tPgogICAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY2RuLnRhaWx3aW5kY3NzLmNvbSI+PC9zY3JpcHQ+CiAgICA8c3R5bGU+CiAgICAgICAgLyogQ3VzdG9tIHN0eWxlcyBmb3IgSW50ZXIgZm9udCBhbmQgZ2VuZXJhbCBib2R5IHN0eWxpbmcgKi8KICAgICAgICBib2R5IHsKICAgICAgICAgICAgZm9udC1mYW1pbHk6ICdJbnRlcicsIHNhbnMtc2VyaWY7CiAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmMGYyZjU7IC8qIExpZ2h0IGdyZXkgYmFja2dyb3VuZCAqLwogICAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7IC8qIEFsaWduIHRvIHN0YXJ0IGZvciBiZXR0ZXIgdG9wIHNwYWNpbmcgKi8KICAgICAgICAgICAgbWluLWhlaWdodDogMTAwdmg7CiAgICAgICAgICAgIHBhZGRpbmc6IDJyZW0gMXJlbTsgLyogUGFkZGluZyBmb3IgbW9iaWxlICovCiAgICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgfQoKICAgICAgICAvKiBTcGVjaWZpYyBpbnB1dCBmb2N1cyBhbmQgc2hhZG93IGZvciBjb25zaXN0ZW5jeSAqLwogICAgICAgIGlucHV0OmZvY3VzIHsKICAgICAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgM3B4IHJnYmEoNTksIDEzMCwgMjQ2LCAwLjQ1KTsgLyogVGFpbHdpbmQgYmx1ZS01MDAgc2hhZG93ICovCiAgICAgICAgICAgIGJvcmRlci1jb2xvcjogIzNiODJmNjsgLyogVGFpbHdpbmQgYmx1ZS01MDAgKi8KICAgICAgICB9CgogICAgICAgIC8qIE1lc3NhZ2UgQm94IFN0eWxpbmcgKi8KICAgICAgICAubWVzc2FnZS1ib3ggewogICAgICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgICAgIHRvcDogMS41cmVtOwogICAgICAgICAgICBsZWZ0OiA1MCU7CiAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTsKICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2VmNDQ0NDsgLyogUmVkIGZvciBlcnJvciAqLwogICAgICAgICAgICBjb2xvcjogd2hpdGU7CiAgICAgICAgICAgIHBhZGRpbmc6IDAuNzVyZW0gMS41cmVtOwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiAwLjVyZW07CiAgICAgICAgICAgIGJveC1zaGFkb3c6IDAgNHB4IDZweCByZ2JhKDAsIDAsIDAsIDAuMSk7CiAgICAgICAgICAgIHotaW5kZXg6IDEwMDA7CiAgICAgICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4zcyBlYXNlLWluLW91dDsKICAgICAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7IC8qIEFsbG93cyBjbGlja3MgdG8gcGFzcyB0aHJvdWdoIHdoZW4gaGlkZGVuICovCiAgICAgICAgfQogICAgICAgIC5tZXNzYWdlLWJveC5zaG93IHsKICAgICAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICAgICAgcG9pbnRlci1ldmVudHM6IGF1dG87CiAgICAgICAgfQogICAgPC9zdHlsZT4KPC9oZWFkPgo8Ym9keSBjbGFzcz0ic2VsZWN0aW9uOmJnLWJsdWUtMjAwIj4KICAgIDwhLS0gTWFpbiBDYWxjdWxhdG9yIENvbnRhaW5lciAtLT4KICAgIDxkaXYgY2xhc3M9ImNhbGN1bGF0b3ItY29udGFpbmVyIGJnLXdoaXRlIHAtOCByb3VuZGVkLXhsIHNoYWRvdy14bCBtYXgtdy1sZyB3LWZ1bGwiPgogICAgICAgIDwhLS0gQ2FsY3VsYXRvciBUaXRsZSAtLT4KICAgICAgICA8aDEgY2xhc3M9InRleHQtM3hsIGZvbnQtZXh0cmFib2xkIHRleHQtY2VudGVyIHRleHQtZ3JheS04MDAgbWItOCB0cmFja2luZy10aWdodCI+CiAgICAgICAgICAgIEhvbWUgTG9hbiBDYWxjdWxhdG9yCiAgICAgICAgPC9oMT4KCiAgICAgICAgPCEtLSBJbnB1dCBGaWVsZHMgU2VjdGlvbiAtLT4KICAgICAgICA8ZGl2IGNsYXNzPSJzcGFjZS15LTYgbWItOCI+CiAgICAgICAgICAgIDwhLS0gTG9hbiBBbW91bnQgSW5wdXQgLS0+CiAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJsb2FuQW1vdW50IiBjbGFzcz0iYmxvY2sgdGV4dC1zbSBmb250LW1lZGl1bSB0ZXh0LWdyYXktNzAwIG1iLTEiPkxvYW4gQW1vdW50IChVU0QpPC9sYWJlbD4KICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJudW1iZXIiIGlkPSJsb2FuQW1vdW50IiB2YWx1ZT0iMjAwMDAwIiBtaW49IjAiCiAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9Im10LTEgYmxvY2sgdy1mdWxsIHB4LTQgcHktMiBib3JkZXIgYm9yZGVyLWdyYXktMzAwIHJvdW5kZWQtbGcgc2hhZG93LXNtIGZvY3VzOnJpbmctYmx1ZS01MDAgZm9jdXM6Ym9yZGVyLWJsdWUtNTAwIHNtOnRleHQtYmFzZSB0cmFuc2l0aW9uIGVhc2UtaW4tb3V0IGR1cmF0aW9uLTE1MCI+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPCEtLSBEb3duIFBheW1lbnQgSW5wdXQgLS0+CiAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJkb3duUGF5bWVudCIgY2xhc3M9ImJsb2NrIHRleHQtc20gZm9udC1tZWRpdW0gdGV4dC1ncmF5LTcwMCBtYi0xIj5Eb3duIFBheW1lbnQgKFVTRCkgPHNwYW4gY2xhc3M9InRleHQtZ3JheS01MDAgdGV4dC14cyI+KE9wdGlvbmFsKTwvc3Bhbj48L2xhYmVsPgogICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9Im51bWJlciIgaWQ9ImRvd25QYXltZW50IiB2YWx1ZT0iMjAwMDAiIG1pbj0iMCIKICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ibXQtMSBibG9jayB3LWZ1bGwgcHgtNCBweS0yIGJvcmRlciBib3JkZXItZ3JheS0zMDAgcm91bmRlZC1sZyBzaGFkb3ctc20gZm9jdXM6cmluZy1ibHVlLTUwMCBmb2N1czpib3JkZXItYmx1ZS01MDAgc206dGV4dC1iYXNlIHRyYW5zaXRpb24gZWFzZS1pbi1vdXQgZHVyYXRpb24tMTUwIj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8IS0tIEludGVyZXN0IFJhdGUgSW5wdXQgLS0+CiAgICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgICAgICA8bGFiZWwgZm9yPSJpbnRlcmVzdFJhdGUiIGNsYXNzPSJibG9jayB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtZ3JheS03MDAgbWItMSI+SW50ZXJlc3QgUmF0ZSAoJSk8L2xhYmVsPgogICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9Im51bWJlciIgaWQ9ImludGVyZXN0UmF0ZSIgdmFsdWU9IjQuNSIgbWluPSIwIiBzdGVwPSIwLjAxIgogICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJtdC0xIGJsb2NrIHctZnVsbCBweC00IHB5LTIgYm9yZGVyIGJvcmRlci1ncmF5LTMwMCByb3VuZGVkLWxnIHNoYWRvdy1zbSBmb2N1czpyaW5nLWJsdWUtNTAwIGZvY3VzOmJvcmRlci1ibHVlLTUwMCBzbTp0ZXh0LWJhc2UgdHJhbnNpdGlvbiBlYXNlLWluLW91dCBkdXJhdGlvbi0xNTAiPgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDwhLS0gTG9hbiBUZXJtIElucHV0IC0tPgogICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgPGxhYmVsIGZvcj0ibG9hblRlcm0iIGNsYXNzPSJibG9jayB0ZXh0LXNtIGZvbnQtbWVkaXVtIHRleHQtZ3JheS03MDAgbWItMSI+TG9hbiBUZXJtIChZZWFycyk8L2xhYmVsPgogICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9Im51bWJlciIgaWQ9ImxvYW5UZXJtIiB2YWx1ZT0iMzAiIG1pbj0iMSIKICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ibXQtMSBibG9jayB3LWZ1bGwgcHgtNCBweS0yIGJvcmRlciBib3JkZXItZ3JheS0zMDAgcm91bmRlZC1sZyBzaGFkb3ctc20gZm9jdXM6cmluZy1ibHVlLTUwMCBmb2N1czpib3JkZXItYmx1ZS01MDAgc206dGV4dC1iYXNlIHRyYW5zaXRpb24gZWFzZS1pbi1vdXQgZHVyYXRpb24tMTUwIj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDwhLS0gQ2FsY3VsYXRlIEJ1dHRvbiAtLT4KICAgICAgICA8YnV0dG9uIGlkPSJjYWxjdWxhdGVCdG4iCiAgICAgICAgICAgICAgICBjbGFzcz0idy1mdWxsIGJnLWJsdWUtNjAwIGhvdmVyOmJnLWJsdWUtNzAwIHRleHQtd2hpdGUgZm9udC1zZW1pYm9sZCBweS0zIHB4LTYgcm91bmRlZC1sZyBzaGFkb3ctbWQgdHJhbnNpdGlvbiBkdXJhdGlvbi0zMDAgZWFzZS1pbi1vdXQgdHJhbnNmb3JtIGhvdmVyOnNjYWxlLTEwNSBmb2N1czpvdXRsaW5lLW5vbmUgZm9jdXM6cmluZy00IGZvY3VzOnJpbmctYmx1ZS01MDAgZm9jdXM6cmluZy1vcGFjaXR5LTUwIj4KICAgICAgICAgICAgQ2FsY3VsYXRlIE1vcnRnYWdlCiAgICAgICAgPC9idXR0b24+CgogICAgICAgIDwhLS0gUmVzdWx0cyBTZWN0aW9uIC0tPgogICAgICAgIDxkaXYgY2xhc3M9Im10LTggcHQtNiBib3JkZXItdC0yIGJvcmRlci1ncmF5LTIwMCBzcGFjZS15LTQiPgogICAgICAgICAgICA8aDIgY2xhc3M9InRleHQteGwgZm9udC1ib2xkIHRleHQtZ3JheS04MDAgbWItNCI+TG9hbiBEZXRhaWxzPC9oMj4KCiAgICAgICAgICAgIDwhLS0gTW9udGhseSBQYXltZW50IFJlc3VsdCAtLT4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIGJnLWJsdWUtNTAgcC00IHJvdW5kZWQtbGcgc2hhZG93LXNtIj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LWdyYXktNzAwIGZvbnQtbWVkaXVtIj5Fc3RpbWF0ZWQgTW9udGhseSBQYXltZW50Ojwvc3Bhbj4KICAgICAgICAgICAgICAgIDxzcGFuIGlkPSJtb250aGx5UGF5bWVudCIgY2xhc3M9InRleHQtYmx1ZS03MDAgdGV4dC1sZyBmb250LWJvbGQiPiQwLjAwPC9zcGFuPgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDwhLS0gVG90YWwgSW50ZXJlc3QgUmVzdWx0IC0tPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJmbGV4IGp1c3RpZnktYmV0d2VlbiBpdGVtcy1jZW50ZXIgYmctYmx1ZS01MCBwLTQgcm91bmRlZC1sZyBzaGFkb3ctc20iPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRleHQtZ3JheS03MDAgZm9udC1tZWRpdW0iPlRvdGFsIEludGVyZXN0IFBhaWQ6PC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4gaWQ9InRvdGFsSW50ZXJlc3QiIGNsYXNzPSJ0ZXh0LWJsdWUtNzAwIHRleHQtbGcgZm9udC1ib2xkIj4kMC4wMDwvc3Bhbj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8IS0tIFRvdGFsIEFtb3VudCBQYWlkIFJlc3VsdCAtLT4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZmxleCBqdXN0aWZ5LWJldHdlZW4gaXRlbXMtY2VudGVyIGJnLWJsdWUtNTAgcC00IHJvdW5kZWQtbGcgc2hhZG93LXNtIj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0ZXh0LWdyYXktNzAwIGZvbnQtbWVkaXVtIj5Ub3RhbCBBbW91bnQgUGFpZDo8L3NwYW4+CiAgICAgICAgICAgICAgICA8c3BhbiBpZD0idG90YWxBbW91bnRQYWlkIiBjbGFzcz0idGV4dC1ibHVlLTcwMCB0ZXh0LWxnIGZvbnQtYm9sZCI+JDAuMDA8L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC9kaXY+CgogICAgPCEtLSBNZXNzYWdlIEJveCBmb3IgQWxlcnRzIC0tPgogICAgPGRpdiBpZD0ibWVzc2FnZUJveCIgY2xhc3M9Im1lc3NhZ2UtYm94Ij48L2Rpdj4KCiAgICA8c2NyaXB0PgogICAgICAgIC8vIEhlbHBlciBmdW5jdGlvbiB0byBnZXQgYW4gZWxlbWVudCBieSBJRCBhbmQgcmVwb3J0IGlmIGl0J3MgbWlzc2luZwogICAgICAgIGZ1bmN0aW9uIGdldEVsZW1lbnRCeUlkT3JSZXBvcnQoaWQsIG5hbWUpIHsKICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTsKICAgICAgICAgICAgaWYgKCFlbGVtZW50KSB7CiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGBFcnJvcjogRWxlbWVudCB3aXRoIElEICcke2lkfScgKCR7bmFtZX0pIG5vdCBmb3VuZC4gVGhlIGNhbGN1bGF0b3IgbWlnaHQgbm90IGZ1bmN0aW9uIGNvcnJlY3RseS5gKTsKICAgICAgICAgICAgICAgIC8vIElmIG1lc3NhZ2VCb3ggaXNuJ3QgZm91bmQgeWV0LCBsb2cgdG8gY29uc29sZSBvbmx5CiAgICAgICAgICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ21lc3NhZ2VCb3gnKSkgewogICAgICAgICAgICAgICAgICAgIHNob3dNZXNzYWdlQm94KGBJbml0aWFsaXphdGlvbiBlcnJvcjogTWlzc2luZyAnJHtuYW1lfScgZWxlbWVudC5gLCAnZXJyb3InKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gZWxlbWVudDsKICAgICAgICB9CgogICAgICAgIC8vIEdldCByZWZlcmVuY2VzIHRvIERPTSBlbGVtZW50cwogICAgICAgIGNvbnN0IGxvYW5BbW91bnRJbnB1dCA9IGdldEVsZW1lbnRCeUlkT3JSZXBvcnQoJ2xvYW5BbW91bnQnLCAnTG9hbiBBbW91bnQgSW5wdXQnKTsKICAgICAgICBjb25zdCBkb3duUGF5bWVudElucHV0ID0gZ2V0RWxlbWVudEJ5SWRPclJlcG9ydCgnZG93blBheW1lbnQnLCAnRG93biBQYXltZW50IElucHV0Jyk7CiAgICAgICAgY29uc3QgaW50ZXJlc3RSYXRlSW5wdXQgPSBnZXRFbGVtZW50QnlJZE9yUmVwb3J0KCdpbnRlcmVzdFJhdGUnLCAnSW50ZXJlc3QgUmF0ZSBJbnB1dCcpOwogICAgICAgIGNvbnN0IGxvYW5UZXJtSW5wdXQgPSBnZXRFbGVtZW50QnlJZE9yUmVwb3J0KCdsb2FuVGVybScsICdMb2FuIFRlcm0gSW5wdXQnKTsKICAgICAgICBjb25zdCBjYWxjdWxhdGVCdG4gPSBnZXRFbGVtZW50QnlJZE9yUmVwb3J0KCdjYWxjdWxhdGVCdG4nLCAnQ2FsY3VsYXRlIEJ1dHRvbicpOwoKICAgICAgICBjb25zdCBtb250aGx5UGF5bWVudFNwYW4gPSBnZXRFbGVtZW50QnlJZE9yUmVwb3J0KCdtb250aGx5UGF5bWVudCcsICdNb250aGx5IFBheW1lbnQgUmVzdWx0Jyk7CiAgICAgICAgLy8gQ29ycmVjdGVkIGdldEVsZW1lbnRCeUlkIGNhbGxzIHRvIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkCiAgICAgICAgY29uc3QgdG90YWxJbnRlcmVzdFNwYW4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG90YWxJbnRlcmVzdCcpOwogICAgICAgIGNvbnN0IHRvdGFsQW1vdW50UGFpZFNwYW4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG90YWxBbW91bnRQYWlkJyk7CiAgICAgICAgY29uc3QgbWVzc2FnZUJveCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtZXNzYWdlQm94Jyk7IC8vIENoYW5nZWQgdG8gZGlyZWN0IGdldEVsZW1lbnRCeUlkLCBhcyBpdCdzIHVzZWQgaW4gdGhlIGhlbHBlciBpdHNlbGYuCgogICAgICAgIC8qKgogICAgICAgICAqIERpc3BsYXlzIGEgdGVtcG9yYXJ5IG1lc3NhZ2UgYm94IHdpdGggYSBnaXZlbiBtZXNzYWdlIGFuZCB0eXBlIChlLmcuLCAnZXJyb3InLCAnc3VjY2VzcycpLgogICAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIC0gVGhlIG1lc3NhZ2UgdG8gZGlzcGxheS4KICAgICAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZSAtIFRoZSB0eXBlIG9mIG1lc3NhZ2UgKCdlcnJvcicsICdzdWNjZXNzJykuCiAgICAgICAgICovCiAgICAgICAgZnVuY3Rpb24gc2hvd01lc3NhZ2VCb3gobWVzc2FnZSwgdHlwZSA9ICdlcnJvcicpIHsKICAgICAgICAgICAgaWYgKCFtZXNzYWdlQm94KSB7IC8vIEVuc3VyZSBtZXNzYWdlQm94IGl0c2VsZiBleGlzdHMgYmVmb3JlIHRyeWluZyB0byB1c2UgaXQKICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ01lc3NhZ2UgYm94IGVsZW1lbnQgbm90IGZvdW5kLiBDYW5ub3QgZGlzcGxheSBtZXNzYWdlOiAnICsgbWVzc2FnZSk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbWVzc2FnZUJveC50ZXh0Q29udGVudCA9IG1lc3NhZ2U7CiAgICAgICAgICAgIG1lc3NhZ2VCb3guY2xhc3NOYW1lID0gJ21lc3NhZ2UtYm94IHNob3cnOyAvLyBSZXNldCBhbmQgc2hvdwogICAgICAgICAgICBpZiAodHlwZSA9PT0gJ2Vycm9yJykgewogICAgICAgICAgICAgICAgbWVzc2FnZUJveC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAnI2VmNDQ0NCc7IC8vIFRhaWx3aW5kIHJlZC01MDAKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIG1lc3NhZ2VCb3guc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJyMyMmM1NWUnOyAvLyBUYWlsd2luZCBncmVlbi01MDAKICAgICAgICAgICAgfQoKICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICAgICAgICBtZXNzYWdlQm94LmNsYXNzTGlzdC5yZW1vdmUoJ3Nob3cnKTsKICAgICAgICAgICAgfSwgMzAwMCk7IC8vIEhpZGUgYWZ0ZXIgMyBzZWNvbmRzCiAgICAgICAgfQoKICAgICAgICAvKioKICAgICAgICAgKiBGb3JtYXRzIGEgbnVtYmVyIGFzIGEgY3VycmVuY3kgc3RyaW5nIChlLmcuLCAkMSwyMzQuNTYpLgogICAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBhbW91bnQgLSBUaGUgbnVtYmVyIHRvIGZvcm1hdC4KICAgICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZm9ybWF0dGVkIGN1cnJlbmN5IHN0cmluZy4KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBmb3JtYXRDdXJyZW5jeShhbW91bnQpIHsKICAgICAgICAgICAgcmV0dXJuIG5ldyBJbnRsLk51bWJlckZvcm1hdCgnZW4tVVMnLCB7CiAgICAgICAgICAgICAgICBzdHlsZTogJ2N1cnJlbmN5JywKICAgICAgICAgICAgICAgIGN1cnJlbmN5OiAnVVNEJywKICAgICAgICAgICAgICAgIG1pbmltdW1GcmFjdGlvbkRpZ2l0czogMiwKICAgICAgICAgICAgICAgIG1heGltdW1GcmFjdGlvbkRpZ2l0czogMgogICAgICAgICAgICB9KS5mb3JtYXQoYW1vdW50KTsKICAgICAgICB9CgogICAgICAgIC8qKgogICAgICAgICAqIENhbGN1bGF0ZXMgdGhlIGhvbWUgbG9hbiBkZXRhaWxzIChtb250aGx5IHBheW1lbnQsIHRvdGFsIGludGVyZXN0LCB0b3RhbCBwYWlkKS4KICAgICAgICAgKi8KICAgICAgICBmdW5jdGlvbiBjYWxjdWxhdGVMb2FuKCkgewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgLy8gRW5zdXJlIGFsbCBjcml0aWNhbCBpbnB1dCBlbGVtZW50cyBhcmUgYXZhaWxhYmxlIGJlZm9yZSBwcm9jZWVkaW5nIHdpdGggY2FsY3VsYXRpb25zCiAgICAgICAgICAgICAgICBpZiAoIWxvYW5BbW91bnRJbnB1dCB8fCAhZG93blBheW1lbnRJbnB1dCB8fCAhaW50ZXJlc3RSYXRlSW5wdXQgfHwgIWxvYW5UZXJtSW5wdXQpIHsKICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdPbmUgb3IgbW9yZSByZXF1aXJlZCBpbnB1dCBET00gZWxlbWVudHMgYXJlIG1pc3NpbmcuIENhbGN1bGF0aW9uIGFib3J0ZWQuJyk7CiAgICAgICAgICAgICAgICAgICAgc2hvd01lc3NhZ2VCb3goJ0NhbGN1bGF0b3IgaW5wdXRzIG1pc3NpbmcuIENhbm5vdCBwZXJmb3JtIGNhbGN1bGF0aW9uLicsICdlcnJvcicpOwogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBHZXQgaW5wdXQgdmFsdWVzIGFuZCBjb252ZXJ0IHRvIG51bWJlcnMKICAgICAgICAgICAgICAgIGNvbnN0IGxvYW5BbW91bnQgPSBwYXJzZUZsb2F0KGxvYW5BbW91bnRJbnB1dC52YWx1ZSk7CiAgICAgICAgICAgICAgICBjb25zdCBkb3duUGF5bWVudCA9IHBhcnNlRmxvYXQoZG93blBheW1lbnRJbnB1dC52YWx1ZSB8fCAnMCcpOyAvLyBEZWZhdWx0IHRvIDAgaWYgZW1wdHkKICAgICAgICAgICAgICAgIGNvbnN0IGFubnVhbEludGVyZXN0UmF0ZSA9IHBhcnNlRmxvYXQoaW50ZXJlc3RSYXRlSW5wdXQudmFsdWUpOwogICAgICAgICAgICAgICAgY29uc3QgbG9hblRlcm1ZZWFycyA9IHBhcnNlRmxvYXQobG9hblRlcm1JbnB1dC52YWx1ZSk7CgogICAgICAgICAgICAgICAgLy8gSW5wdXQgdmFsaWRhdGlvbgogICAgICAgICAgICAgICAgaWYgKGlzTmFOKGxvYW5BbW91bnQpIHx8IGxvYW5BbW91bnQgPD0gMCkgewogICAgICAgICAgICAgICAgICAgIHNob3dNZXNzYWdlQm94KCdQbGVhc2UgZW50ZXIgYSB2YWxpZCBMb2FuIEFtb3VudCAoZ3JlYXRlciB0aGFuIDApLicpOwogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChpc05hTihkb3duUGF5bWVudCkgfHwgZG93blBheW1lbnQgPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgIHNob3dNZXNzYWdlQm94KCdQbGVhc2UgZW50ZXIgYSB2YWxpZCBEb3duIFBheW1lbnQgKDAgb3IgbW9yZSkuJyk7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChkb3duUGF5bWVudCA+PSBsb2FuQW1vdW50KSB7CiAgICAgICAgICAgICAgICAgICAgc2hvd01lc3NhZ2VCb3goJ0Rvd24gUGF5bWVudCBjYW5ub3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIExvYW4gQW1vdW50LicpOwogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChpc05hTihhbm51YWxJbnRlcmVzdFJhdGUpIHx8IGFubnVhbEludGVyZXN0UmF0ZSA8IDApIHsKICAgICAgICAgICAgICAgICAgICBzaG93TWVzc2FnZUJveCgnUGxlYXNlIGVudGVyIGEgdmFsaWQgSW50ZXJlc3QgUmF0ZSAoMCUgb3IgbW9yZSkuJyk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKGlzTmFOKGxvYW5UZXJtWWVhcnMpIHx8IGxvYW5UZXJtWWVhcnMgPD0gMCkgewogICAgICAgICAgICAgICAgICAgIHNob3dNZXNzYWdlQm94KCdQbGVhc2UgZW50ZXIgYSB2YWxpZCBMb2FuIFRlcm0gKGF0IGxlYXN0IDEgeWVhcikuJyk7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIENhbGN1bGF0ZSBmaW5hbmNlZCBhbW91bnQgKHByaW5jaXBhbCkKICAgICAgICAgICAgICAgIGNvbnN0IHByaW5jaXBhbCA9IGxvYW5BbW91bnQgLSBkb3duUGF5bWVudDsKCiAgICAgICAgICAgICAgICAvLyBDb252ZXJ0IGFubnVhbCBpbnRlcmVzdCByYXRlIHRvIG1vbnRobHkgcmF0ZSAoYXMgYSBkZWNpbWFsKQogICAgICAgICAgICAgICAgY29uc3QgbW9udGhseUludGVyZXN0UmF0ZSA9IChhbm51YWxJbnRlcmVzdFJhdGUgLyAxMDApIC8gMTI7CgogICAgICAgICAgICAgICAgLy8gQ29udmVydCBsb2FuIHRlcm0gZnJvbSB5ZWFycyB0byBtb250aHMKICAgICAgICAgICAgICAgIGNvbnN0IG51bWJlck9mUGF5bWVudHMgPSBsb2FuVGVybVllYXJzICogMTI7CgogICAgICAgICAgICAgICAgbGV0IG1vbnRobHlQYXltZW50ID0gMDsKICAgICAgICAgICAgICAgIGlmIChtb250aGx5SW50ZXJlc3RSYXRlID09PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gSGFuZGxlIHplcm8gaW50ZXJlc3QgcmF0ZSBjYXNlIHRvIGF2b2lkIGRpdmlzaW9uIGJ5IHplcm8KICAgICAgICAgICAgICAgICAgICBtb250aGx5UGF5bWVudCA9IHByaW5jaXBhbCAvIG51bWJlck9mUGF5bWVudHM7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgIC8vIENhbGN1bGF0ZSBtb250aGx5IHBheW1lbnQgdXNpbmcgdGhlIGZvcm11bGE6CiAgICAgICAgICAgICAgICAgICAgLy8gTSA9IFAgWyBpKDEgKyBpKV5uIF0gLyBbICgxICsgaSlebiDigJMgMV0KICAgICAgICAgICAgICAgICAgICAvLyBXaGVyZToKICAgICAgICAgICAgICAgICAgICAvLyBNID0gTW9udGhseSBwYXltZW50CiAgICAgICAgICAgICAgICAgICAgLy8gUCA9IFByaW5jaXBhbCBsb2FuIGFtb3VudAogICAgICAgICAgICAgICAgICAgIC8vIGkgPSBNb250aGx5IGludGVyZXN0IHJhdGUgKGFzIGEgZGVjaW1hbCkKICAgICAgICAgICAgICAgICAgICAvLyBuID0gVG90YWwgbnVtYmVyIG9mIHBheW1lbnRzIChsb2FuIHRlcm0gaW4gbW9udGhzKQogICAgICAgICAgICAgICAgICAgIG1vbnRobHlQYXltZW50ID0gcHJpbmNpcGFsICogKG1vbnRobHlJbnRlcmVzdFJhdGUgKiBNYXRoLnBvdygxICsgbW9udGhseUludGVyZXN0UmF0ZSwgbnVtYmVyT2ZQYXltZW50cykpIC8gKE1hdGgucG93KDEgKyBtb250aGx5SW50ZXJlc3RSYXRlLCBudW1iZXJPZlBheW1lbnRzKSAtIDEpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIENhbGN1bGF0ZSB0b3RhbCBhbW91bnQgcGFpZAogICAgICAgICAgICAgICAgY29uc3QgdG90YWxBbW91bnRQYWlkID0gbW9udGhseVBheW1lbnQgKiBudW1iZXJPZlBheW1lbnRzOwoKICAgICAgICAgICAgICAgIC8vIENhbGN1bGF0ZSB0b3RhbCBpbnRlcmVzdCBwYWlkCiAgICAgICAgICAgICAgICBjb25zdCB0b3RhbEludGVyZXN0UGFpZCA9IHRvdGFsQW1vdW50UGFpZCAtIHByaW5jaXBhbDsKCiAgICAgICAgICAgICAgICAvLyBEaXNwbGF5IHJlc3VsdHMgKG9ubHkgaWYgcmVzdWx0IHNwYW5zIGV4aXN0KQogICAgICAgICAgICAgICAgaWYgKG1vbnRobHlQYXltZW50U3BhbikgbW9udGhseVBheW1lbnRTcGFuLnRleHRDb250ZW50ID0gZm9ybWF0Q3VycmVuY3kobW9udGhseVBheW1lbnQpOwogICAgICAgICAgICAgICAgaWYgKHRvdGFsSW50ZXJlc3RTcGFuKSB0b3RhbEludGVyZXN0U3Bhbi50ZXh0Q29udGVudCA9IGZvcm1hdEN1cnJlbmN5KHRvdGFsSW50ZXJlc3RQYWlkKTsKICAgICAgICAgICAgICAgIGlmICh0b3RhbEFtb3VudFBhaWRTcGFuKSB0b3RhbEFtb3VudFBhaWRTcGFuLnRleHRDb250ZW50ID0gZm9ybWF0Q3VycmVuY3kodG90YWxBbW91bnRQYWlkKTsKCiAgICAgICAgICAgICAgICBzaG93TWVzc2FnZUJveCgnQ2FsY3VsYXRpb24gY29tcGxldGUhJywgJ3N1Y2Nlc3MnKTsKICAgICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIGNhbGN1bGF0aW9uOicsIGUpOwogICAgICAgICAgICAgICAgc2hvd01lc3NhZ2VCb3goJ0FuIHVuZXhwZWN0ZWQgZXJyb3Igb2NjdXJyZWQgZHVyaW5nIGNhbGN1bGF0aW9uLiBQbGVhc2UgY2hlY2sgY29uc29sZSBmb3IgZGV0YWlscy4nLCAnZXJyb3InKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gQWRkIGV2ZW50IGxpc3RlbmVycyBPTkxZIGlmIGVsZW1lbnRzIGV4aXN0CiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsICgpID0+IHsKICAgICAgICAgICAgLy8gQ2hlY2sgaWYgYWxsIHByaW1hcnkgZWxlbWVudHMgYXJlIGZvdW5kIGJlZm9yZSBhdHRhY2hpbmcgbGlzdGVuZXJzIG9yIHJ1bm5pbmcgaW5pdGlhbCBjYWxjdWxhdGlvbgogICAgICAgICAgICBpZiAobG9hbkFtb3VudElucHV0ICYmIGRvd25QYXltZW50SW5wdXQgJiYgaW50ZXJlc3RSYXRlSW5wdXQgJiYgbG9hblRlcm1JbnB1dCAmJiBjYWxjdWxhdGVCdG4gJiYKICAgICAgICAgICAgICAgIG1vbnRobHlQYXltZW50U3BhbiAmJiB0b3RhbEludGVyZXN0U3BhbiAmJiB0b3RhbEFtb3VudFBhaWRTcGFuICYmIG1lc3NhZ2VCb3gpIHsKCiAgICAgICAgICAgICAgICBjYWxjdWxhdGVCdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBjYWxjdWxhdGVMb2FuKTsKCiAgICAgICAgICAgICAgICBsb2FuQW1vdW50SW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBjYWxjdWxhdGVMb2FuKTsKICAgICAgICAgICAgICAgIGRvd25QYXltZW50SW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBjYWxjdWxhdGVMb2FuKTsKICAgICAgICAgICAgICAgIGludGVyZXN0UmF0ZUlucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgY2FsY3VsYXRlTG9hbik7CiAgICAgICAgICAgICAgICBsb2FuVGVybUlucHV0LmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgY2FsY3VsYXRlTG9hbik7CgogICAgICAgICAgICAgICAgLy8gUnVuIGluaXRpYWwgY2FsY3VsYXRpb24gd2l0aCBkZWZhdWx0IHZhbHVlcwogICAgICAgICAgICAgICAgY2FsY3VsYXRlTG9hbigpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignQ2FsY3VsYXRvciBjYW5ub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQgZHVlIHRvIG1pc3NpbmcgRE9NIGVsZW1lbnRzLicpOwogICAgICAgICAgICAgICAgc2hvd01lc3NhZ2VCb3goJ0NhbGN1bGF0b3IgY2Fubm90IGxvYWQgcHJvcGVybHkuIFNvbWUgZWxlbWVudHMgYXJlIG1pc3NpbmcuIENoZWNrIGNvbnNvbGUgZm9yIGRldGFpbHMuJywgJ2Vycm9yJyk7CiAgICAgICAgICAgIH0KICAgICAgICB9KTsKICAgIDwvc2NyaXB0Pgo8L2JvZHk+CjwvaHRtbD4=[/cmsmasters_html][/cmsmasters_column][/cmsmasters_row]